﻿
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;

namespace LowLevelGraphics.Filter
{
    /// <summary>
    /// This is the public interface for all the filters used
    /// </summary>
    public interface IFilter : ICloneable
    {
        /// <summary>
        /// Gets or sets the step.
        /// </summary>
        /// <value>The step.</value>
        Size Step { get; set; }

        /// <summary>
        /// Executes the specified _bitmap.
        /// </summary>
        /// <param name="_bitmap">The _bitmap.</param>
        /// <returns></returns>
        UnsafeBitmap Execute(UnsafeBitmap _bitmap);

        /// <summary>
        /// Executes the cloned.
        /// </summary>
        /// <param name="_bitmap">The _bitmap.</param>
        /// <returns></returns>
        UnsafeBitmap ExecuteCloned(UnsafeBitmap _bitmap);

        /// <summary>
        /// Executes the channelled.
        /// </summary>
        /// <param name="_bitmap">The _bitmap.</param>
        /// <param name="_bIncludeA">if set to <c>true</c> [_b include A].</param>
        /// <param name="_bIncludeR">if set to <c>true</c> [_b include R].</param>
        /// <param name="_bIncludeG">if set to <c>true</c> [_b include G].</param>
        /// <param name="_bIncludeB">if set to <c>true</c> [_b include B].</param>
        void ExecuteChannelled(UnsafeBitmap _bitmap, bool _bIncludeA, bool _bIncludeR, bool _bIncludeG, bool _bIncludeB);

        /// <summary>
        /// Executeds the masked.
        /// </summary>
        /// <param name="_bitmap">The _bitmap.</param>
        /// <param name="_bitmapMask">The _bitmap mask.</param>
        void ExecutedMasked(UnsafeBitmap _bitmap, UnsafeBitmap _bitmapMask);

        /// <summary>
        /// Executeds the masked channelled.
        /// </summary>
        /// <param name="_bitmap">The _bitmap.</param>
        /// <param name="_bitmapMask">The _bitmap mask.</param>
        /// <param name="_bIncludeA">if set to <c>true</c> [_b include A].</param>
        /// <param name="_bIncludeR">if set to <c>true</c> [_b include R].</param>
        /// <param name="_bIncludeG">if set to <c>true</c> [_b include G].</param>
        /// <param name="_bIncludeB">if set to <c>true</c> [_b include B].</param>
        void ExecutedMaskedChannelled(UnsafeBitmap _bitmap, UnsafeBitmap _bitmapMask, bool _bIncludeA, bool _bIncludeR, bool _bIncludeG, bool _bIncludeB);

        /// <summary>
        /// Gets or sets the unsafebitmap.
        /// </summary>
        /// <value>The bitmap.</value>
        UnsafeBitmap Bitmap { get; set; }

        /// <summary>
        /// Gets or sets the ROI rectangle.
        /// </summary>
        /// <value>The rectangle.</value>
        Rectangle Rectangle { get; set; }

        ///// <summary>
        ///// Gets the scale of this filter or sets it
        ///// </summary>
        //float Scale { get; set; }

        ///// <summary>
        ///// Gets the offset of this filter or sets it
        ///// </summary>
        //float Offset { get; set; }

        ///// <summary>
        ///// Processing Mode
        ///// </summary>
        //PROCESSING_MODE ProcessingMode { get; set; }
    }
}
